var dbpath = './db.json'
var fs = require('fs')

exports.find = function (callback) {
  fs.readFile(dbpath, function (err, data) {
    if (err) return callback(err)
    callback(null, JSON.parse(data).students)
  })
}

exports.save = function (student, callback) {
  fs.readFile(dbpath, function (err, data) {
    if (err) return callback(err)

    // 读取并转换为对象
    var students = JSON.parse(data).students

    // 处理 id 唯一的，不重复
    student.id = parseInt(student.id)

    student.id = students[students.length - 1].id + 1

    // 把用户传递的对象保存到数组中
    students.push(student)

    // 把对象数据转换为字符串
    var fileData = JSON.stringify({
      students: students,
    })

    // 把字符串保存到文件中
    fs.writeFile(dbpath, fileData, function (err) {
      if (err) return callback(err)
      callback(null)
    })
  })
}

exports.findById = function (id, callback) {
  fs.readFile(dbpath, function (err, data) {
    if (err) return callback(err)
    var students = JSON.parse(data).students
    var ret = students.find(function (item) {
      return item.id == id
    })
    callback(null, ret)
  })
}

exports.updateById = function (student, callback) {
  fs.readFile(dbpath, function (err, data) {
    if (err) return callback(err)

    // 读取并转换为对象
    var students = JSON.parse(data).students

    student.id = parseInt(student.id)

    var ret = students.find(function (item) {
      return item.id === student.id
    })

    for (var key in student) {
      ret[key] = student[key]
    }

    // 把对象数据转换为字符串
    var fileData = JSON.stringify({
      students: students,
    })

    // 把字符串保存到文件中
    fs.writeFile(dbpath, fileData, function (err) {
      if (err) return callback(err)
      callback(null)
    })
  })
}

exports.deleteById = function (id, callback) {
  fs.readFile(dbpath, function (err, data) {
    if (err) return callback(err)
    var students = JSON.parse(data).students

    id = parseInt(id)

    var deleteId = students.findIndex(function (item) {
      return item.id === id
    })

    students.splice(deleteId, 1)

    // 把对象数据转换为字符串
    var fileData = JSON.stringify({
      students: students,
    })

    // 把字符串保存到文件中
    fs.writeFile(dbpath, fileData, function (err) {
      if (err) return callback(err)
      callback(null)
    })
  })
}
